package check0

import (
	"fmt"
	"path/filepath"
	csv0 "searcher/src/csv"
	db0 "searcher/src/db"
	web0 "searcher/src/web"
	"time"

	"github.com/ungerik/go-dry"
)

// 检测当前目录下是否有`search_tool.db`文件
// 没有: 需要从 csv 文件中载入数据

var (
	dbref db0.DbHifiniRef
	bdr   db0.BaseDictRef
)

func CheckInstallOrRunServer() {
	// db0.SetGormLoggerLevelSlient() // gorm 报错也不打印任何信息【方法废弃已删除】
	// db0.SetGormLoggerLevelError() // 慢查询等一些警告信息不输出 【方法废弃已删除】

	dbpath := filepath.Join(".", "search_tool.db")

	if dry.FileExists(dbpath) {
		// 如果数据库中的数据为零 需要初始化数据库
		// 这里会不会有BUG呢, 如果用户把数据清空了, 会不会触发了这个逻辑呢?
		// 用一个数据字典记录一下, 就可以解决这个问题
		// if dbref.Count() <= 0 {
		// }
		// fmt.Println("dbinit: ", bdr.ValueByKey("dbinit"))
		if bdr.ValueByKey("dbinit") != "Y" { // 用字典数据值来校验更准确
			fmt.Println(">> 正在初始化数据, 请不要中断程序...")
			initDatatbase()
		}
	} else {
		// 否则加载csv文件, 初始化数据库
		fmt.Println(">> 检测到没有db文件, 开始初始化数据, 请不要中断程序...")
		initDatatbase()
	}

	fmt.Println("如果有报错直接QQ上@我(QQ2267410686), 或者想增加一些功能也可以@我")

	// 然后启动web服务
	var s web0.NormalServer
	s.Start(false) // true: debug mode, false: release mode
}

func initDatatbase() {
	// fmt.Println("... initDatatbase invoked ...")
	// return
	start := time.Now()
	fmt.Println("start: ", start.Format("2006-01-02 15:04:05"))
	csv0.ReadLine(&dbref)

	// 最后调用
	updateBaseDictAfterInit()
	end := time.Now()

	// interval := end.Second() - start.Second()
	interval := end.Sub(start) // 上面代码将API理解错了
	// 竟然出现了负数
	fmt.Printf("end: %s, 总共耗时: %v \n", end.Format("2006-01-02 15:04:05"), interval)
	fmt.Println("数据初始化完毕, 之后启动不会再看到这些信息了")
}

// 当数据库初始化完毕后, 记得调用一下
func updateBaseDictAfterInit() {
	bdr.Save("dbinit", "Y", "数据库初始化完毕记为Y")
}
